/*
 * @Author: aggfb 714740235@qq.com
 * @Date: 2024-05-18 14:29:53
 * @LastEditors: aggfb 714740235@qq.com
 * @LastEditTime: 2024-05-25 21:44:05
 * @FilePath: \2.code\label_rack_control\firmware\model\motor_ctrl\motor_ctrl.h
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#ifndef __MOTOR_CTRL_H
#define __MOTOR_CTRL_H

#include "stdio.h"    
#include "bsp_sys.h" 
#include "bsp_timer.h"     
#include "bsp_gpio.h"
#include "bsp_delay.h"

typedef struct _motor_ctrl {
    uint16_t speed_ratio_cmd;  /* 控制速度指令 */
    uint8_t dir_cmd;          /* 控制方向指令 */
    uint8_t brake_cmd;        /* 控制刹车指令 */
    uint32_t offset_cmd;        /* 控制offset位置 */
    uint8_t manual_automatic;        /* 0:自动/1:手动模式 */
    uint8_t feed_state;        /* 进料状态 */
    uint8_t flag_trig; 
    uint16_t fault_type; /* 故障码 */
} motor_ctrl_t;

enum manual_automatic_e
{
    MOTOR_CTRL_MATNUAL = 0, /* 手动 */
    MOTOR_CTRL_AUTOMATIC,   /* 自动 */    
};    

enum motor_fault_e
{
    MOTOR_FAULT_DEF = 0x0000,   /* 无故障 */  
    MOTOR_FAULT_SHORTAGE = 0x0001, /* 缺料故障 */
    MOTOR_FAULT_PRESS_OVER_TIME = 0x0002, /* 按键被按下超时异常 */
};    

#define MOTOR_SPEED_MAX 1  /* 最大速度 */
#define MOTOR_SPEED_MIN 20 /* 对应最小速度 */

#define MOTOR_OFFSET_MIN 0    /* 最小偏移量 */
#define MOTOR_OFFSET_MAX 1000 /* 最大偏移量 */

#define MOTOR_SPEED_STEP 50 /* 速度档位步进 */
#define MOTOR_SPEED_GEAR 10 /* 速度档位 */

/* 
    1.现在是1us一个计数
    2.速度是10, 那就是10KHz的频率，repetitionCounter = 2; 一个脉冲20us
    3. 2*1000*1000/10 = 运行5秒钟
*/
#define MOTOR_POSTION_BASE  60000 /* 基础位置 */

extern motor_ctrl_t* motor_ctrl_dev(void);
extern void motor_ctrl_stop(void);
extern void motor_ctrl_running(uint8_t repetition, uint8_t dir, uint16_t speed, uint16_t step);

#endif


